package helloalgo.sort;

import java.util.Arrays;

/**
 * @author: Shelly
 * @create: 2023-01-03 00:03:36
 * @describe: 冒泡排序
 * 思路：
 * 1.从数组最左端开始向右遍历，依次对比相邻元素大小，若 左元素 > 右元素 则将它俩交换，最终可将最大元素移动至数组最右端
 * 完成此次冒泡操作后，数组最大元素已在正确位置，接下来只需排序剩余n-1个元素
 * 2.同理，对剩余n-1个元素执行「冒泡」，可将第二大元素交换至正确位置，因而待排序元素只剩n-2个
 * 3.以此类推…… 循环n-1轮「冒泡」，即可完成整个数组的排序
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {1,4,5,6,1,45,56,23,21,2,5};
        bubbleSort(arr);
        System.out.print(Arrays.toString(arr));
    }
    /* 冒泡排序 */
    static void bubbleSort(int[] nums) {
        // 外循环：待排序元素数量为 n-1, n-2, ..., 1
        for (int i = nums.length - 1; i > 0; i--) {
            // 内循环：冒泡操作
            for (int j = 0; j < i; j++) {
                if (nums[j] > nums[j + 1]) {
                    // 交换 nums[j] 与 nums[j + 1]
                    int tmp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                }
            }
        }
    }
}
